"""
Celery应用配置
"""
import os
from celery import Celery
from config.settings import CELERY_BROKER_URL, CELERY_RESULT_BACKEND

# 创建Celery实例
app = Celery(
    'finance_data_platform',
    broker=CELERY_BROKER_URL,
    backend=CELERY_RESULT_BACKEND,
    include=[
        'modules.tasks.stock_tasks',
        'modules.tasks.index_tasks',
        'modules.tasks.etf_tasks',
        'modules.tasks.indicators_tasks',
    ]
)

# 配置Celery
app.conf.update(
    # 任务配置
    task_acks_late=True,
    task_reject_on_worker_lost=True,
    task_serializer='json',
    accept_content=['json'],
    result_serializer='json',
    timezone='Asia/Shanghai',
    enable_utc=False,
    
    # 任务队列配置
    task_queues={
        'stock_data': {'exchange': 'stock_data'},
        'index_data': {'exchange': 'index_data'},
        'etf_data': {'exchange': 'etf_data'},
        'indicators': {'exchange': 'indicators'},
        'default': {'exchange': 'default'},
    },
    
    # 任务路由
    task_routes={
        'modules.tasks.stock_tasks.*': {'queue': 'stock_data'},
        'modules.tasks.index_tasks.*': {'queue': 'index_data'},
        'modules.tasks.etf_tasks.*': {'queue': 'etf_data'},
        'modules.tasks.indicators_tasks.*': {'queue': 'indicators'},
    },
    
    # Worker配置
    worker_concurrency=int(os.getenv('CELERY_WORKER_CONCURRENCY', '4')),
    worker_prefetch_multiplier=1,
    worker_max_tasks_per_child=200,
    
    # 任务结果
    result_expires=60 * 60 * 24 * 7,  # 7天
    
    # 定时任务
    beat_schedule={
        'update_stock_daily_9pm': {
            'task': 'modules.tasks.stock_tasks.schedule_daily_stock_update',
            'schedule': 3600 * 21,  # 每天21:00执行
            'args': (),
            'options': {'queue': 'stock_data'},
        },
        'update_index_daily_10pm': {
            'task': 'modules.tasks.index_tasks.schedule_daily_index_update',
            'schedule': 3600 * 22,  # 每天22:00执行
            'args': (),
            'options': {'queue': 'index_data'},
        },
        'update_etf_daily_11pm': {
            'task': 'modules.tasks.etf_tasks.schedule_daily_etf_update',
            'schedule': 3600 * 23,  # 每天23:00执行
            'args': (),
            'options': {'queue': 'etf_data'},
        },
        'calculate_technical_indicators_1am': {
            'task': 'modules.tasks.indicators_tasks.schedule_technical_indicators_calculation',
            'schedule': 3600 * 1,  # 每天01:00执行
            'args': (),
            'options': {'queue': 'indicators'},
        },
    },
)

# 启动Celery应用
if __name__ == '__main__':
    app.start()